import cv2
import os


def save_every_nth_frame(video_path, output_dir, n=10, quality=95):
    """
    将视频每n帧保存为JPG图像
    :param video_path: 输入视频路径
    :param output_dir: 输出目录
    :param n: 每隔n帧保存一帧（默认10）
    :param quality: JPG质量（1-100，默认95）
    """
    # 创建输出目录
    os.makedirs(output_dir, exist_ok=True)

    # 打开视频文件
    cap = cv2.VideoCapture(video_path)
    if not cap.isOpened():
        print(f"无法打开视频文件: {video_path}")
        return

    # 获取视频信息
    fps = cap.get(cv2.CAP_PROP_FPS)
    total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    print(f"视频信息: {fps:.2f} FPS, 总帧数: {total_frames}")

    frame_count = 0
    saved_count = 0

    while True:
        ret, frame = cap.read()
        if not ret:
            break  # 视频结束

        # 每n帧保存一次
        if frame_count % n == 0:
            output_path = os.path.join(output_dir, f"frame_{frame_count:06d}.jpg")
            cv2.imwrite(output_path, frame, [cv2.IMWRITE_JPEG_QUALITY, quality])
            saved_count += 1
            print(f"已保存: {output_path}")

        frame_count += 1

    # 释放资源
    cap.release()
    print(f"处理完成！共保存 {saved_count}/{total_frames} 帧")


# 使用示例
video_path = r"F:\data\02\14-32-13-0.mp4" # 替换为你的视频路径
output_dir = r"F:\data\02\新建文件夹"  # 输出目录
save_every_nth_frame(video_path, output_dir, n=10)  # 每5帧保存一帧